<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        class Father {
            // 1. 吧父类的无参构造函数继续了重写 
            
            // 2. 一个类里面只能有一个构造函数，
            //   函数的实参和形参的个数可以不一致
            //   此时编译器无法判断调用的是哪一个构造函数
            constructor(age, sex) {
                this.age = age;
                this.sex = sex;
            }
            play() {
                console.log('father 在赚钱');
                return 100;
            }
        }
        class Son extends Father {
            /* 
            Must call super constructor in derived class 
            before accessing 'this' or returning from 
            derived constructor
            子类的构造函数添加属性时，必须通过 super 调用父类的构造函数
              */
            constructor(age, sex, school) {
                // 4. 子类继承父类后，构造函数中，必须先调用父类的构造函数
                super(age, sex);
                this.school = school;
                // 5. 构造函数中必须先调用父亲的构造函数，在执行自己的逻辑
                // 防止代码冲突，违反了就近原则
            }
            game() {
                // 3. 调用父类的方法  super 
                let a = super.play();
                if (a > 50) {
                    console.log('吃喝玩乐');
                } else {
                    console.log('吃喝');
                }
            }
        }
        let b = new Son(22, '男', '郑大');
        console.log(b);
        b.game();
    </script>
</body>

</html>